{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reduced Framerate Results\n",
    "\n",
    "Copypasta-rich as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "import os\n",
    "import sys\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "from matplotlib import rc\n",
    "# Enable full LaTeX support in plot text. Requires a full-fledged LaTeX installation\n",
    "# on your system, accessible via PATH.\n",
    "rc('text', usetex=True)\n",
    "\n",
    "plt.rcParams[\"figure.figsize\"] = (16, 6)\n",
    "matplotlib.rcParams.update({'font.size': 16})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved figure to [low-time-res-acc-static-depth-result] in [../fig].    \n",
      "Saved figure to [low-time-res-com-static-depth-result] in [../fig].    \n"
     ]
    },
    {
     "data": {
      "image/png": "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\nSY6SLCVJrXW/xbZ7tdbtWZUNAACAm2MuW4xLKbtJjmqtB00gXiml3Gmx7fpMCwgAAMCNMZfBOMlW\nrfVg4P7DJGNbgEspy7Mr0vW3s7OTUkpWVlaysrKSxcXFrK2t5f79+y+su7Kykp2dnak95+bm5guP\nnffcFzWtsgMAAN0wd12pSymrZyw+TrIxweYb6YXoSdbtpNXV1Tx+/Pj0/tHRUTY3N/Pw4cM8fPjw\ndPne3l6Wl6fzO8Py8nIODg5ydHQ0tX2OMs2yAwAAN988thgvpReEB50kSSll4byNSikbSb42w3Ld\nSMvLy3n8+HEePXr0XOvtxsbG1MLl6upq7ty5c6FW3P39/dy+fXuidadZ9km0KRsAADB/5jEYL6SZ\ncGtAPygPL39uu1rryWyKdPPt7u7mrbfemtn+33zzzdNWYwAAgHkyd12p07QOD+kH4uGW5CRJKeXO\n0Jjkmfq9/+P/zn/+f753WU93pl/8rz6Xf/4//jdT29/GxkZOTk5Ouzuvra1le3s7W1tbSZLt7e0c\nHh7m+Pg4y8vLefvtt7O6upq1tbWsr6/n+Pg4h4eHWVpayoMHD7K6+nyP+NXV1WxsbGR3dzd7e3tn\nluHk5CRvvPHG6X52dnaytbWVzc3NHBz0/ryLi4tZWlrK06dPz30tw2VfW1vL3bt38/Dhwzx69CjL\ny8t58ODBaavyuNfQ3/7evXtJkvv37+edd97J48ePW5cNAACYP/MYjI/TazUetJAkZ7UINxNuTdxS\nXErZSrKVJLdu3coHH3xw7rofffRRfvCDH7yw/O9+9HeptU76lDPxdz/6uzPLNsqPfvSj1FrP3O5L\nX/pSkuRb3/pWvvSlL6XWevr6//AP/zDvvfdevvnNbybpjUteWlrKD37wg9Ra89577+WP//iPs7Cw\nkN/4jd/Ia6+9lr/4i784fc6/+7teWX//938/v/zLv5zf/M3fzPLy8nPPkSS/+qu/mnv37uUP/uAP\ncnJykn/2z/5Z/sk/+Sf5gz/4g/zKr/xKvv71r+eP/uiPkmTkax/eb601b731Vr71rW9lYWEhv/zL\nv5zf/u3fzr/9t//29PFRr2F4fx999NFpPbYt20cffTTymAMAAC7f3AXjWuuTUspw0F1KcnjOJqtJ\nlgcm7fpykoXmOsgHtdbn+u42l3/aT5L19fV669atc8vyve99L5/+9KdfWP57/9M/muSlzJ1PfvKT\nKaWc+Zr6XZx/7ud+Lp/+9KdTSskrr7yST3/60/nCF76Q999/P//u3/27bGxs5Od//udPtyul5O7d\nu/nJn/zJJMnXv/71lFLyJ3/yJ9nY2MgnP/nJfOITn8inP/3p/NIv/VI2NjbyL//lv8ze3t5zz3F4\neJg//dM/ze/8zu/kd37nd073/yd/8if5+Z//+bzyyiun+xlncL/9+6+//vppGX/91389Dx8+fO7x\nUa9heH+vvPLKc/XYpmyvvPJKRh1zAADA5Zu7YNzYH+oefTvJaf/bppV4tbnO8XNdqJsW4eVa6/Sv\nA3SDPXnyJEnOnLRqY2Mjb775ZnZ2dnJ0dJSNjY08ePAgCwtnz4W2vLx87lji3d3drK2tZXd397nl\n/f0Ozow9TSsrK8/dPz4+s1f+qVGvAQAAuFnmcfKt1Fp30msFvtO0/D4dCsAbOeO6xk0o3my2vTdq\nFmuet7Oz80JYHXTv3r08ffo0z549y/Hxcfb3989dd9RlmfpjjYdnqF5eXs6jR49ervAzcFmXlgIA\nAK7eXAbjJKm13m9ahO833Z8HH9uvtb5wfZz+8lrrYrOdWarHODo6ytraWhYWFk4nlxp2eHiYw8Ne\nT/aFhYUsLT0/OfjDhw9zcnKSk5OTbG5uZnl5ORsb519Kend3N/v7+zk5+fjP07/E0ubm5umyg4OD\n05bspaWl0xbc/rJpGvUalpeX8+GHHybpTRD2zjvvPLftrMsGAADM1twGY2bjyZMnWVlZycrKShYX\nF7O5uZm7d+/m8ePHI7fb3d3N4uJiFhcXs7CwcDrjc9ILy5ubm1lcXMzJycnY7tD9VuPhrsrvvvtu\nkpw+zzvvvHPaatsPqYuLi9nZ2XkuVE/DqNewvb2d/f39rKysZHNzM+vr689tO+uyAQAAs1Wuenbl\nq7S+vl5Hdd/95je/mV/4hV+4xBJdP8OXMrqOLvM1OKYAAODylFIe11rXx62nxRgAAIBOE4wBAADo\ntHm9XBPXxLixydfBTXgNAADAy9NiDAAAQKcJxgAAAHSaYAwAAECnCcYAAAB0mmAMAABApwnGAAAA\ndJpgDAAAQKcJxh2ys7OTUkpWVlaysrKSxcXFrK2t5f79+y+su7Kykp2dnak95+bm5guPnffc03Bw\ncHD6Gg8ODmbyHMPu37+f27dvX8pzAQAA0/PKVReAy7W6uprHjx+f3j86Osrm5mYePnyYhw8fni7f\n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\nVfOFtJFkrVn0uJRyPDg+upSynIGJxLpugjp7mGS71nrYzED+oJSSs65R3QUT1NfjJLu11s1mVvbH\npZQPa633r6K8V22S9+TAuo+TLNRaVy6zjPNkXH2VUh42jw/a6erxlUxUZwvpvS/3aq2bA8s6aVR9\nNT8YvH3Opmu11qNLKeQcmeD4epDevCorzf2HpZTdOZxn5dJMUGe7SZZrrSvNe/H9UspRrfXMq5/c\ndKPOS9t8h3bFuPN45/kvGlMn83WeX2t1m9ItybP0Pmz797fSu/5y//5ueidIT5M8vOryzsNtVJ0l\nWR2upyT30puM7crLPm/11a+zofUfJHlw1eWe1/oaWL7XvD87e2xNUl/pfYFtXXU55+k2QZ3tdfk9\n+BL1tTB0u3PWe7Yrtwnqqw6tv+FzbOR5xUKSOvT4blfPycadl076HdqV2wT15Ty/RZ3M43m+rtRT\nUkpZTa+1afAX7aP0/uhJerNt11rXcs41mbtmXJ3V3jWtt4c2O0pvpvLOmfAYezK02UaSdy6heHNn\nkvpq1ttI75h67xKLN3cmrS8+NmGdbUXrQZKJP8NO+rdm0W6S1y6xmHPjAu/JzrWs901QZ+tJMvT4\ne/3lXTPqvNR3wovGncc7z3/RqDqZx/N8wXh6lpIMXzf5KOl2t7kxxtZZfbHr3JeTDIe/rpjoGGvG\na9wrpTxL8rXa3S5Pk74n9/LiB3MXTVpfm81YoGfl48vkddXIOmu6j6W53x9D9bDD3wltvycfpNcF\nfXibrpikvu73x+01y26n259nL3MudpReSzLPc17LzM3beb5gPD1nfUgcN/8uXWZBrpFWddZ8EG8l\n6erYqUnrayHJSnpfYEsd/gIbW1/N+KnDMz6Yu2jS42spyc82t+2rnijjio2rs34w3q613q61LjbL\nzxtHe9NN/Jnf9ORYrx0ev54J6qs2Y4lLKTVNt9eBdbpoXJ09Sl4IdutnLMN5LZdsHs7zBePpOcn5\nvzh2+UtqlLZ19m6SN2pHJ8jIhPVVa31Sa91uuq4kvVaXLhpZX003sS7/0DJskuNrO8lrA11d99Lt\n+htXZ/16e2Ng+U5642a7qM1n/naSTk6yOGBsfTUT4qXWWpIsNut39TM/GVNnzefWYZo6anp17CS9\nbvyXUsLrw3ktl+3Kz/PNSj09Z31ILCc+bEeYuM6aL/+9DncLTl7uGHsnvRn+Fjp4HI6sr1LK3fS+\n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\nXEzuqumxAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd94bf046d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n3nnnnXznO99J0hnnu7CwkB/+8Iepteadd97J7//+72dubi5/+2//7bzxxhv5oz/6o+PH/MlPOmX9\ne3/v7+VrX/tafv3Xfz2Li4svPUaS/OIv/mLu3buX3/3d383R0VF+6Zd+KX/jb/yN/O7v/m7+5t/8\nm/n2t7+d3/u930uSgc+9/35rrXn77bfz3e9+N3Nzc/na176W3/iN38g//sf/+Pj2Qc+h//4+/PDD\n43oct2wffvjhwHMOAACYvqmE3Vrr01JKf3hdSLJ/yiE3kyz2TGz11SRzzTq9u7XWl/rNNksZ7STJ\nyspKvXHjxqll+eCDD/LJT37yle2/9Z//tVGeysz5+Mc/nlLKic+p2734Z37mZ/LJT34ypZS89tpr\n+eQnP5kvfOELeffdd/NP/+k/zerqan72Z3/2+LhSSu7cuZOf+qmfSpJ8+9vfTiklf/AHf5DV1dV8\n/OMfz8c+9rF88pOfzC/8wi9kdXU1v/M7v5Pt7e2XHmN/fz9/+Id/mN/8zd/Mb/7mbx7f/x/8wR/k\nZ3/2Z/Paa68d388wvffbvf71r3/9uIy/8iu/kr29vZduH/Qc+u/vtddee6kexynba6+9lkHnHAAA\nMH3TatlNkp2+rsm3khz3fW1ac2826/C+1H25abldrLVOfk2bFnv69GmSnDix0+rqat58881sbm7m\n4OAgq6urefjwYebmTp4vbHFx8dSxuVtbW1leXs7W1tZL27v32zsj9CQtLS29dP3w8MQe8ccGPQcA\nAKBdprbObq11M53W2ttNC+2zvlC7mhPW3W2C7lpz7L1Bszfzss3NzVcCaK979+7l2bNnefHiRQ4P\nD7Ozs3PqvoOWGOqO3e2fmXlxcTGPHz8+W+EvwLSWSQIAAC7f1MJuktRa7zctt/ebrse9t+3UWl9Z\n66W7vdY63xxnduYhDg4Osry8nLm5ueMJmPrt7+9nf7/Ti3xubi4LCy9Pir23t5ejo6McHR1lbW0t\ni4uLWV09fanjra2t7Ozs5Ojooz9Pd7mgtbW14227u7vHLc4LCwvHLa3dbZM06DksLi7mvffeS9KZ\nROvBgwcvHXvRZQMAAC7WVMMuF+Pp06dZWlrK0tJS5ufns7a2ljt37uTJkycDj9va2sr8/Hzm5+cz\nNzd3PNNx0gnAa2trmZ+fz9HR0dCuyN3W3f5uwo8ePUqS48d58ODBcetqN3jOz89nc3PzpaA8CYOe\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd94c997dd8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "out_dir = '../fig'\n",
    "\n",
    "def gen_plots(root, part):\n",
    "    file_pattern = 'k-99999-kitti-odometry-{sequence_id:02d}-offset-0-depth-precomputed-{depth}-' \\\n",
    "                   'voxelsize-0.0500-max-depth-m-20.00-dynamic-mode-NO-direct-ref-' \\\n",
    "                   'with-fusion-weights{fuse_every}-{part}.csv'\n",
    "    base = os.path.join(root, file_pattern)\n",
    "    res = {}\n",
    "    res_completeness = {}\n",
    "    \n",
    "    sequence_id = 9\n",
    "    fuse_every_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]\n",
    "    metrics = ['input', 'fusion']\n",
    "    # TODO eval on both\n",
    "#     depths = ['elas', 'dispnet']\n",
    "    depths = ['dispnet']\n",
    "    \n",
    "    # Load the data and prepare some positioning and color info\n",
    "    # (Since we're doing a nontrivial plot, which means we need to do a lot of\n",
    "    #  stuff manually.)\n",
    "    box_positions = []\n",
    "    box_colors = []\n",
    "    columns = []\n",
    "    box_offset = 0.0\n",
    "    INNER_GAP = 0.75\n",
    "    SEQUENCE_GAP = 1.0\n",
    "    GROUP_SIZE = len(depths) * len(metrics)\n",
    "    \n",
    "    colors = {\n",
    "        'elas': {\n",
    "            'input': 'C2',\n",
    "            'fusion': 'C3',\n",
    "        },\n",
    "        'dispnet': {\n",
    "            'input': 'C0',\n",
    "            'fusion': 'C1'\n",
    "        }\n",
    "    }\n",
    "    \n",
    "    def setup_xaxis_legend(ax, **kw):\n",
    "        bp_np = np.array(box_positions)\n",
    "        alt_ticks = bp_np[np.arange(len(bp_np)) % GROUP_SIZE == 0] + (INNER_GAP*(GROUP_SIZE-1.0)/2.0)\n",
    "        ax.set_xticks(alt_ticks)\n",
    "        ax.set_xticklabels(\"{:02d}\".format(k) for k in fuse_every_vals)\n",
    "        ax.set_xlabel(\"$k$ (Fusion every $k$th frame)\")\n",
    "\n",
    "        ax.set_ylim([0.0, 1.0])\n",
    "\n",
    "        for patch, color in zip(boxplot['medians'], box_colors):\n",
    "            patch.set_color(color)    \n",
    "\n",
    "        for patch, color in zip(boxplot['boxes'], box_colors):\n",
    "            patch.set_color(color)\n",
    "\n",
    "        # Ugly, but required since every box has two whiskers and two caps...\n",
    "        for idx, (whisker, cap) in enumerate(zip(boxplot['whiskers'], boxplot['caps'])):\n",
    "            cap.set_color(box_colors[idx%(2*GROUP_SIZE) // 2])\n",
    "            whisker.set_color(box_colors[idx%(2*GROUP_SIZE) // 2])   \n",
    "\n",
    "        # Dummies for showing the appropriate legend\n",
    "#         ax.plot([0.0], [-1000], label=\"ELAS input\", color=colors['elas']['input'])\n",
    "#         ax.plot([0.0], [-1000], label=\"ELAS fused\", color=colors['elas']['fusion'])\n",
    "        ax.plot([0.0], [-1000], label=\"DispNet input\", color=colors['dispnet']['input'])\n",
    "        ax.plot([0.0], [-1000], label=\"DispNet fused\", color=colors['dispnet']['fusion'])\n",
    "        ax.legend(loc=kw.get('legendloc', 'lower left'))\n",
    "\n",
    "        ax.grid('off')\n",
    "        ax.yaxis.grid(True, linestyle='-', which='major', color='lightgrey', alpha=0.75)\n",
    "        \n",
    "    def save_fig(f, fname):\n",
    "        print(\"Saving figure to [{}]... \".format(fname), end='')\n",
    "        f.savefig(os.path.join(out_dir, fname + '.png'), bbox_inches='tight')\n",
    "        f.savefig(os.path.join(out_dir, fname + '.eps'), bbox_inches='tight')\n",
    "        print(\"\\rSaved figure to [{}] in [{}].    \".format(fname, out_dir))\n",
    "        \n",
    "    \n",
    "    for fuse_every in fuse_every_vals:\n",
    "        for depth in depths:\n",
    "            # Part dictates what we are evaluating: dynamic or static parts\n",
    "            fuse_every_val = \"\" if fuse_every == 1 else \"-fuse-every-{}\".format(fuse_every)\n",
    "            fname = base.format(sequence_id=sequence_id, depth=depth, fuse_every=fuse_every_val, part=part)\n",
    "            df = pd.read_csv(fname)\n",
    "#             print(\"DF OK\", fuse_every, depth, len(df))\n",
    "            \n",
    "            for metric in metrics:\n",
    "                key = \"{}-{}-{:02d}\".format(metric, depth, fuse_every)\n",
    "                \n",
    "                # Do not count frames with no pixels in them. This would distort the \n",
    "                # dynamic reconstruction metrics due to frames containing no objects.\n",
    "                ok = (df['{}-total-3.00-kitti'.format(metric)] != 0)\n",
    "\n",
    "                err = df['{}-error-3.00-kitti'.format(metric)][ok]\n",
    "                tot = df['{}-total-3.00-kitti'.format(metric)][ok]\n",
    "                mis = df['{}-missing-3.00-kitti'.format(metric)][ok]\n",
    "                cor = df['{}-correct-3.00-kitti'.format(metric)][ok]\n",
    "                mis_sep = df['{}-missing-separate-3.00-kitti'.format(metric)][ok]\n",
    "                \n",
    "                err = err[50:1050]\n",
    "                tot = tot[50:1050]\n",
    "                mis = mis[50:1050]\n",
    "                cor = cor[50:1050]\n",
    "                mis_sep = mis_sep[50:1050]\n",
    "                \n",
    "\n",
    "                acc_perc = cor / (tot - mis)\n",
    "                res[key] = acc_perc\n",
    "                \n",
    "#                 print(fuse_every, depth, acc_perc.mean())\n",
    "                \n",
    "                completeness = 1.0 - (mis_sep / tot)\n",
    "                res_completeness[key] = completeness\n",
    "                \n",
    "                box_colors.append(colors[depth][metric])\n",
    "                \n",
    "                columns.append(key)\n",
    "                box_positions.append(box_offset)\n",
    "                box_offset += INNER_GAP\n",
    "            \n",
    "        box_offset += SEQUENCE_GAP\n",
    "        \n",
    "    ################################################################################\n",
    "    # Accuracy plots\n",
    "    ################################################################################\n",
    "    res_df = pd.DataFrame(res)    \n",
    "    FIG_SIZE = (16, 6)\n",
    "    fig = plt.figure(figsize=FIG_SIZE)\n",
    "    ax = fig.add_subplot(1, 1, 1)\n",
    "    (ax, boxplot) = res_df.boxplot(columns, showfliers=False, \n",
    "                                   return_type='both',\n",
    "                                   widths=0.50, \n",
    "                                   ax=ax, \n",
    "#                                    patch_artist=True,  # Enable fill\n",
    "                                   positions=box_positions)\n",
    "    setup_xaxis_legend(ax)\n",
    "    ax.set_ylabel(\"Accuracy\", labelpad=15)\n",
    "    ax.set_ylim([0.3, 1.01])\n",
    "    save_fig(fig, 'low-time-res-acc-{}'.format(part))\n",
    "    \n",
    "    ################################################################################\n",
    "    # Completeness plots\n",
    "    ################################################################################\n",
    "    res_completeness_df = pd.DataFrame(res_completeness)\n",
    "    fig = plt.figure(figsize=FIG_SIZE)\n",
    "    ax = fig.add_subplot(1, 1, 1)\n",
    "    \n",
    "    (ax, boxplot) = res_completeness_df.boxplot(columns, showfliers=False, \n",
    "                                               return_type='both',\n",
    "                                               widths=0.50, \n",
    "                                               ax=ax, \n",
    "            #                                    patch_artist=True,  # Enable fill\n",
    "                                               positions=box_positions)\n",
    "    \n",
    "    setup_xaxis_legend(ax)\n",
    "    ax.set_ylim([0.3, 1.01])\n",
    "    ax.set_ylabel(\"Completeness\")\n",
    "    save_fig(fig, 'low-time-res-com-{}'.format(part))\n",
    "                \n",
    "        \n",
    "gen_plots('../csv/low-time-res-res', 'static-depth-result')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
